From: Ray Strode Date: Thu, 14 Sep 2017 18:46:13 +0000 (-0400) Subject: gtk-embed: ensure we only listen for window-created events once X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~56 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=90c55e1977fde252b79bcfd9d0ef41144fb21fe2;p=gnome-shell.git gtk-embed: ensure we only listen for window-created events once If a tray icon gets a mapped and unmapped and the mapped again in quick succession, we can end up with multiple handlers listening for window creation events. This commit tries to guard against that by only listening for window-created events when we don't know the actor associated with the icon. https://bugzilla.gnome.org/show_bug.cgi?id=787361 --- diff --git a/src/shell-gtk-embed.c b/src/shell-gtk-embed.c index 176b41320..54061046b 100644 --- a/src/shell-gtk-embed.c +++ b/src/shell-gtk-embed.c @@ -124,13 +124,14 @@ shell_gtk_embed_on_window_mapped (GtkWidget *object, ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed); MetaDisplay *display = shell_global_get_display (shell_global_get ()); - /* Listen for new windows so we can detect when Mutter has - created a MutterWindow for this window */ - priv->window_created_handler = - g_signal_connect (display, - "window-created", - G_CALLBACK (shell_gtk_embed_window_created_cb), - embed); + if (priv->window_created_handler == 0 && priv->window_actor == NULL) + /* Listen for new windows so we can detect when Mutter has + created a MutterWindow for this window */ + priv->window_created_handler = + g_signal_connect (display, + "window-created", + G_CALLBACK (shell_gtk_embed_window_created_cb), + embed); } static void